# -*- coding: utf-8 -*-
"""
------------------------------------------------------------------------------
    File Name:  time
    Author   :  wanwei1029
    Date     :  2018/3/8
    Desc     :参考：http://blog.csdn.net/longerzone/article/details/37574053
    time模块几个基本的方法
    time(),获取当前时间戳，clock()cpu时间，计算性能较准确。
    sleep(sec),停顿sec秒
    gmtime(sec),注意这个函数得到的是UTC时间，比北京时间差8个小时。传入一个时间戳
    localtime(sec),这个得到的是本地时间。
    mktime(struct_time),与localtime相反，根据对应的struct_time时间，返回对应的时间戳
    注意和java里System.currentTimeMillis()这类时间戳的区别，java里是毫秒，time里是秒，
    如果是java里传过来的时间戳，要生成时间对象，必须除以1000，换算成秒
------------------------------------------------------------------------------
"""
import time
import samp.samp_logging as sl

logger = sl.get_logger('time')


def base_time():
    """
    struct_time结构，函数gmtime(),localtime(),strptime()返回的都是一个struct_time结构，共有9个元素，分别为：
    0	tm_year	(for example, 1993)
    1	tm_mon	range [1, 12]（月份是1至12，非0开始）
    2	tm_mday	range [1, 31]
    3	tm_hour	range [0, 23]
    4	tm_min	range [0, 59]
    5	tm_sec	range [0, 61]（考虑到了闰秒和双闰秒的情况）
    6	tm_wday	range [0, 6], Monday is 0
    7	tm_yday	range [1, 366]
    8	tm_isdst	0, 1 or -1; see below
    :return:
    """
    logger.info("当前时间为:{0}".format(time.time()))
    logger.info("当前时间为:{0}".format(time.ctime()))
    t0 = time.clock()
    logger.info("休息:{0}秒".format(1))
    time.sleep(1)
    logger.info("程序耗时:{0}".format(time.clock()-t0))
    logger.info("localtime() 值为:{0}".format(time.localtime()))
    logger.info("当前utc时间为：{0}".format(time.gmtime(float(1520523015.170))))
    logger.info("对应的时间为：{0}".format(time.localtime(1520523015.170)))
    hour = time.localtime(1520523015.170).tm_hour
    logger.info("对应的小时为：{0}".format(hour))
    daysFromYear = time.localtime(1520523015.170)[7]
    logger.info("年初到现在一共：{0}天".format(daysFromYear))


def format_parse_time():
    """
    格式化时间函数：strftime，两个参数，一个是格式，一个时struct_time，返回一个字符串
    可用的格式有：
        %y 两位数的年份表示（00-99）
        %Y 四位数的年份表示（000-9999）
        %m 月份（01-12）
        %d 月内中的一天（0-31）
        %H 24小时制小时数（0-23）
        %I 12小时制小时数（01-12）
        %M 分钟数（00=59）
        %S 秒（00-59）

        %a 本地简化星期名称
        %A 本地完整星期名称
        %b 本地简化的月份名称
        %B 本地完整的月份名称
        %c 本地相应的日期表示和时间表示
        %j 年内的一天（001-366）
        %p 本地A.M.或P.M.的等价符
        %U 一年中的星期数（00-53）星期天为星期的开始
        %w 星期（0-6），星期天为星期的开始
        %W 一年中的星期数（00-53）星期一为星期的开始
        %x 本地相应的日期表示
        %X 本地相应的时间表示
        %Z 当前时区的名称
        %% %号本身
    :return:
    """
    float_time = 1520523911
    format_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(float_time))
    logger.info("格式化后的时间为：{0}".format(format_time))
    parse_time = time.strptime(format_time,"%Y-%m-%d %H:%M:%S")
    logger.info("转换后的时间为：{0}".format(parse_time))
    logger.info("对应的时间戳为：{0}".format(time.mktime(parse_time)))


if __name__ == '__main__':
    test_method = "format_parse_time"
    if test_method == "base_time":
        base_time()
    elif test_method == "format_parse_time":
        format_parse_time()
